package org.example.onlinejudge.config;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.stereotype.Component;

import java.io.IOException;

/**
 * 自定义登录成功处理器
 * 负责处理用户登录成功后的跳转逻辑
 * 实现逻辑：
 * 1. 获取用户的角色信息（管理员ROLE_0、教师ROLE_1、学生默认角色）
 * 2. 根据不同角色跳转到相应的页面
 *    - 管理员：跳转到/admin/index
 *    - 教师/学生：跳转到/index
 */
@Component
public class CustomAuthenticationSuccessHandler implements AuthenticationSuccessHandler {

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, 
                                       HttpServletResponse response,
                                       Authentication authentication) throws IOException, ServletException {
        
        // 获取用户的所有权限（包括角色）
        boolean isAdmin = false;
        boolean isTeacher = false;
        
        for (GrantedAuthority authority : authentication.getAuthorities()) {
            String role = authority.getAuthority();
            if ("ROLE_0".equals(role)) { // 管理员角色
                isAdmin = true;
                break;
            } else if ("ROLE_1".equals(role)) { // 教师角色
                isTeacher = true;
            }
        }
        
        // 根据角色跳转到不同页面
        String targetUrl;
        if (isAdmin) {
            targetUrl = "/admin/index"; // 管理员跳转到管理员专属页面
        } else if (isTeacher) {
            targetUrl = "/index"; // 教师跳转到普通首页
        } else {
            targetUrl = "/index"; // 学生跳转到普通首页
        }
        
        response.sendRedirect(targetUrl);
    }
}


